www.gusucode.com > 动网论坛Dvbbs v8.3 > 动网论坛Dvbbs v8.3\code\源程序\BuyPost.asp

    <!-- #include file="conn.asp" -->
<!-- #include file="inc/const.asp" -->
<!--#include file="inc/dv_clsother.asp"-->
<%
	Dvbbs.LoadTemplates("dispbbs")
	Dim Rootid,PostTable,Action,RootID_a
	Dim AnnounceID,Rs,SQL,i
	Dim topic,boardid
	Action = Dvbbs.CheckStr(Request("action"))
	PostTable=Dvbbs.CheckStr(Request("PostTable"))
	PostTable=Checktable(PostTable)
	Rootid=Dvbbs.Checknumeric(Request("ID"))
	RootID_a=Dvbbs.Checknumeric(Request("rootid"))
	AnnounceID=Dvbbs.Checknumeric(Request("ReplyID"))
	topic=Dvbbs.CheckStr(Request("topic"))
	boardid=Dvbbs.Checknumeric(Request("boardid"))
	dvbbs.boardid=boardid
	If dvbbs.boardid=0 Then Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>版块ID号错误。&action=OtherErr"
	Select Case Action
		Case "view" : Dvbbs.stats="查看购买贴子的用户"
		Case "buy" : Dvbbs.stats="金币购买帖子"
		Case "Send" : Dvbbs.stats="悬赏金币"
		Case "Close" : Dvbbs.stats="结帖操作"
		Case "Cancel" : Dvbbs.stats="转成普通帖" 'add by reoaiq by 090927
		Case Else
		Dvbbs.stats="购买帖子"
	End Select
	Dvbbs.Nav()
	Dvbbs.Head_var 1,Application(Dvbbs.CacheName&"_boardlist").documentElement.selectSingleNode("board[@boardid='"&Dvbbs.BoardID&"']/@depth").text,"",""
	If Rootid="" Or Not IsNumeric(Rootid) Then Dvbbs.AddErrCode(35)
	If AnnounceID="" or Not IsNumeric(AnnounceID) Then Dvbbs.AddErrCode(35)
	If Dvbbs.UserID=0 Then Dvbbs.AddErrCode(6)
	Dvbbs.ShowErr()
	Select Case Action
		Case "view" : view()
		Case "buy" : Buy()
		Case "Send" : SendMoney()
		Case "Close" : Close()
        Case "Cancel" : Cancel() 'add by reoaiq by 090927
		Case Else
		main()
	End Select
	Dvbbs.ShowErr()
	Dvbbs.Activeonline()
	Dvbbs.Footer
	Dvbbs.PageEnd()
	'转成普通帖 'add by reoaiq by 090927
	Sub Cancel()
Dim LogMsg
If Dvbbs.BoardMaster Then 
Dvbbs.Execute("update dv_topic set getmoney=0,getmoneytype=0 where topicid="&Rootid&"")
Dvbbs.Execute("update "&PostTable&" set getmoney=0,getmoneytype=0 where Rootid="&Rootid&"")
LogMsg = "金币帖《<a href=""Dispbbs.asp?BoardID="&Dvbbs.BoardID&"&ID="&Rootid&"&ReplyID="&Announceid&"&Skin=1"" target=_blank><b>"&Dvbbs.strCut(Topic,20)&"</b></a>》转换为普通成功"
Dvbbs.Dvbbs_Suc(LogMsg)
Else 
Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>您不是管理员等级,不能转换。&action=OtherErr"
Exit Sub
End If 
End Sub 
	'结帖操作
	Sub Close()
		Dim PostBuyUser,ToUserName,PostUserID,GetMoney,Topic,TopAnnounceID,LogMsg
		Dim TempStr
		Sql = "Select Top 1 PostBuyUser,GetMoney,Topic,AnnounceID From "&PostTable&" where RootID="&Rootid&" and ParentID=0 and GetMoneyType=1 and PostUserID="&Dvbbs.UserID
		Set Rs=Dvbbs.Execute(Sql)
		If Rs.eof and Rs.bof Then
			Dvbbs.AddErrCode(32)
			Exit Sub
		Else
			PostBuyUser = Rs(0)
			GetMoney = Rs(1)
			Topic = Rs(2)
			TopAnnounceID = Rs(3)
		End If
		Rs.Close
		TempStr = Split(PostBuyUser,"|||",2)
		TempStr(0) = cCur(TempStr(0))
		If Request.Form("ReAct")="SaveClose" Then
			Dim SendMoney
			If Not Dvbbs.ChkPost Then
				Dvbbs.AddErrCode(16)
				Exit Sub
			End If
			SendMoney = GetMoney-TempStr(0)
			If SendMoney<0 Then SendMoney = 0
			'更新用户,返还金币
			If SendMoney>0 Then
				Dvbbs.Execute("update [Dv_user] set UserMoney=UserMoney+"&SendMoney&" where userid="&Dvbbs.UserID)
				Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@usermoney").text  = cCur(Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@usermoney").text )+SendMoney	'用户金币数量
			End If
			'更新帖子类型
			Dvbbs.Execute("update Dv_Topic set GetMoneyType=5 where TopicID="&Rootid)
			Dvbbs.Execute("update "&PostTable&" set GetMoneyType=5 where AnnounceID="&TopAnnounceID)

			LogMsg = "<b>结帖操作</b>:悬赏金币帖主题《<a href=""Dispbbs.asp?boardid="&Dvbbs.BoardID&"&id="&Rootid&""" target=_blank><b>"&Topic&"</b></a>》结帖成功,还返金币数为:<b>"&SendMoney&"</b>"
			Dim Dv_LogMsg
			Dv_LogMsg = "结帖操作:悬赏金币帖主题《"&Topic&"》结帖成功,还返金币数为:"&SendMoney
			Dvbbs.Execute("Insert Into Dv_Log (l_AnnounceID,l_BoardID,l_touser,l_username,l_content,l_ip,l_type) values (" & Rootid & "," & Dvbbs.BoardID & ",'" & Dvbbs.MemberName & "','" & Dvbbs.MemberName & "','" & Dvbbs.CheckStr(Dv_LogMsg) & "','" & Dvbbs.UserTrueIP & "',5)")
			Dvbbs.Dvbbs_Suc(LogMsg)
		Else
	%>
	<FORM METHOD=POST ACTION="buypost.asp?action=Close">
	<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
	<tr><th colspan=2>《 <%=Topic%> 》 悬赏金币结帖操作</th></tr>
	<tr>
	<td class=tablebody1 colspan=2><li>执行结帖后,帖子关闭,不允许其他会员回复。</td>
	</tr>
	<tr>
	<td class=tablebody2 align=right width="30%">悬赏金币总数:</td>
	<td class=tablebody1 width="70%"><%=GetMoney%></td>
	</tr>
	<tr>
	<td class=tablebody2 align=right>已悬赏金币总数:</td>
	<td class=tablebody1><%=TempStr(0)%></td>
	</tr>
	<tr>
	<td class=tablebody2 align=right>返还用户金币数:</td>
	<td class=tablebody1><%=GetMoney-TempStr(0)%></td>
	</tr>
	<tr><td class=tablebody2 colspan=2 align=center>
	<INPUT TYPE="submit" value="确定结帖"> <INPUT TYPE="button" value="取消" onclick="history.go(-1)">
	</td></tr>
	<INPUT TYPE="hidden" NAME="react" value="SaveClose">
	<INPUT TYPE="hidden" NAME="PostTable" value="<%=PostTable%>">
	<INPUT TYPE="hidden" NAME="ID" value="<%=Rootid%>">
	<INPUT TYPE="hidden" NAME="ReplyID" value="<%=AnnounceID%>">
	<INPUT TYPE="hidden" NAME="BoardID" value="<%=Dvbbs.BoardID%>">
	</table>
	<%
		End If
	End Sub

	'悬赏金币帖
	Sub SendMoney()
		Dim PostBuyUser,ToUserName,PostUserID,GetMoney,Topic,TopAnnounceID,LogMsg
		Dim TempStr,IsSendUser
		Sql = "Select Top 1 PostBuyUser,GetMoney,Topic,AnnounceID From "&PostTable&" where RootID="&Rootid&" and ParentID=0 and GetMoneyType=1 and PostUserID="&Dvbbs.UserID
		Set Rs=Dvbbs.Execute(Sql)
		If Rs.eof and Rs.bof Then
			Dvbbs.AddErrCode(32)
			Exit Sub
		Else
			PostBuyUser = Rs(0)
			GetMoney = Rs(1)
			Topic = Rs(2)
			TopAnnounceID = Rs(3) 
		End If
		Rs.Close
		ToUserName = Request("UserName")
		TempStr = Split(PostBuyUser,"|||",2)
		TempStr(0) = cCur(TempStr(0))
		If Instr(PostBuyUser,"|||"&ToUserName&",")>0 Then
			IsSendUser = "<font class=Redfont>[已悬赏]</font>"
		Else
			IsSendUser = "<font color=gray>[未悬赏]</font>"
		End If
		If Request.Form("ReAct")="SaveMoney" Then
			If Not Dvbbs.ChkPost Then
				Dvbbs.AddErrCode(16)
				Exit Sub
			End If
			Dim SendMoney
			SendMoney = Request.Form("SendMoney")
			If Not Isnumeric(SendMoney) Then 
				Dvbbs.AddErrCode(35)
				Exit Sub
			Else
				SendMoney = cCur(SendMoney)
			End If
			If TempStr(0) < 0 Then Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>悬赏的金币数太少或已超出了剩余金币数。&action=OtherErr"
			TempStr(0) = TempStr(0)+SendMoney

			If SendMoney<1 or TempStr(0)>GetMoney  Then
				Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>悬赏的金币数太少或已超出了剩余金币数。&action=OtherErr"
				Exit Sub
			End If

			'读取回复用户信息,更新GetMoney数值
			Sql = "Select username,PostUserID,GetMoney From "&PostTable&" where AnnounceID="&AnnounceID
			Dvbbs.SqlQueryNum=Dvbbs.SqlQueryNum+1
			set Rs=Dvbbs.iCreateObject("adodb.recordset")
			Rs.open sql,conn,1,3
			If Rs.eof and Rs.bof Then
				Dvbbs.AddErrCode(32)
				Dvbbs.ShowErr()
			Else
				ToUserName = Rs(0)
				PostUserID = Rs(1)
				If PostUserID=Dvbbs.UserID Then
					Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>悬赏金币帖不能对自已悬赏金币。&action=OtherErr"
					Exit Sub
				End If
				Rs(2) = Rs(2)+SendMoney
				Rs.Update
			End If
			Rs.close
			TempStr(1) = TempStr(1) & "|||" &ToUserName&","&SendMoney
			PostBuyUser = TempStr(0) & "|||" & TempStr(1)
			'更新目标用户,增加金币
			Dvbbs.Execute("update [Dv_user] set UserMoney=UserMoney+"&SendMoney&" where userid="&PostUserID)
			'更新分表中主题行PostBuyUser数据
			Dvbbs.Execute("update "&PostTable&" set PostBuyUser = '"&PostBuyUser&"' where AnnounceID="&TopAnnounceID)
			LogMsg = "关于回复主题《<a href=""Dispbbs.asp?BoardID="&Dvbbs.BoardID&"&ID="&Rootid&"&ReplyID="&Announceid&"&Skin=1"" target=_blank><b>"&Topic&"</b></a>》的帖子悬赏金币成功,<b>"&ToUserName&"</b>获得金币数为:<b>"&SendMoney&"</b>,剩余可悬赏金币数为:<b>"& GetMoney-TempStr(0) &"</b>。"
			Dvbbs.Dvbbs_Suc(LogMsg)
		Else
	%>
	<FORM METHOD=POST ACTION="buypost.asp?action=Send">
	<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
	<tr><th colspan=2>《 <%=Topic%> 》 悬赏金币操作</th></tr>
	<tr>
	<td class=tablebody1 align=right width="30%">悬赏金币总数:</td>
	<td class=tablebody1 width="70%"><%=GetMoney%></td>
	</tr>
	<tr>
	<td class=tablebody1 align=right>已悬赏金币总数:</td>
	<td class=tablebody1><%=TempStr(0)%></td>
	</tr>
	<tr>
	<td class=tablebody1 align=right>悬赏目标用户:</td>
	<td class=tablebody1><%=Server.HtmlEncode(ToUserName)%> <%=IsSendUser%></td>
	</tr>
	<tr>
	<td class=tablebody1 align=right>设置悬赏金币个数:</td>
	<td class=tablebody1><INPUT TYPE="text" NAME="SendMoney" value=""> 剩余<b><font class="Redfont"><%=(GetMoney-TempStr(0))%></font></b>金币。</td>
	</tr>
	<tr><td class=tablebody2 colspan=2 align=center>
	<INPUT TYPE="submit" value="确定"> <INPUT TYPE="button" value="取消" onclick="history.go(-1)">
	</td></tr>
	<INPUT TYPE="hidden" NAME="react" value="SaveMoney">
	<INPUT TYPE="hidden" NAME="PostTable" value="<%=PostTable%>">
	<INPUT TYPE="hidden" NAME="ID" value="<%=Rootid%>">
	<INPUT TYPE="hidden" NAME="ReplyID" value="<%=AnnounceID%>">
	<INPUT TYPE="hidden" NAME="BoardID" value="<%=Dvbbs.BoardID%>">
	</table>
	<%
		End If
	End Sub

	'金币帖子购买
	Sub Buy()
		Dim PostBuyUser,ToUserName,PostUserID,GetMoney,GetMoneyType,IsUpdate,LogMsg,Topic,TempStr
		IsUpdate = False
		Sql = "Select PostBuyUser,username,PostUserID,GetMoney,GetMoneyType,Topic From "&PostTable&" where RootID="&Rootid&" and ParentID=0 and GetMoneyType=3"
		If Not IsObject(Conn) Then ConnectionDatabase
		Dvbbs.SqlQueryNum=Dvbbs.SqlQueryNum+1
		Set Rs = Dvbbs.iCreateObject("adodb.recordset")
		Rs.open Sql,conn,1,3
		If Rs.eof and Rs.bof Then
			Dvbbs.AddErrCode(32)
			Dvbbs.ShowErr()
		Else
			PostBuyUser = Rs(0)
			ToUserName = Rs(1)
			PostUserID = Rs(2)
			GetMoney = Rs(3)
			GetMoneyType = Rs(4)
			Topic = Rs(5)
			If Not IsNumeric(GetMoney) Then GetMoney=0
			If GetMoney < 0 Then Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>由于此贴金币设置数据错误,购买失败。&action=OtherErr"
			If Instr(PostBuyUser,"|||$PayMoney|||") AND Dvbbs.UserID<>PostUserID AND GetMoney<>0 and InStr(PostBuyUser,"|||"&Dvbbs.Membername&"|||")=0 Then
				TempStr = Split(Rs(0),"|||",2)
				Dim BuyMoneyInfo
				BuyMoneyInfo = Split(TempStr(0),"@@@")
				BuyMoneyInfo(1) = cCur(BuyMoneyInfo(1))
				BuyMoneyInfo(2) = Clng(BuyMoneyInfo(2))
				'购买数量限制(设置为“-1”则不限制)
				If BuyMoneyInfo(1)=0 Then
					Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>本帖子已售完。&action=OtherErr"
					Exit Sub
				ElseIf BuyMoneyInfo(1)>0 Then
					BuyMoneyInfo(1) = BuyMoneyInfo(1) - 1 
				End If
				'当VIP不需要付费时将GetMoney清为0
				'If BuyMoneyInfo(2)=0 and Dvbbs.VipGroupUser Then
					'GetMoney = 0
				'End If
				'可购买用户名单限制(每个用户名用英文逗号“,”分隔符分开,注意区分大小写)
				If BuyMoneyInfo(3)<>"" Then
					If Instr(","&BuyMoneyInfo(3)&",",","&Dvbbs.Membername&",")=0 Then
						Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>购买失败,非作者指定的用户不能购买该帖。&action=OtherErr"
						Exit Sub
					End If
				End If
				If GetMoney>CCur(Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@usermoney").text)  Then 
					Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>你的用户金币不足,购买该帖失败。&action=OtherErr"
					Exit Sub
				End If
				BuyMoneyInfo(0) = cCur(BuyMoneyInfo(0)) + GetMoney '*ToolsSetting(4)
				TempStr(0) = BuyMoneyInfo(0) & "@@@" & BuyMoneyInfo(1) & "@@@" & BuyMoneyInfo(2) & "@@@" & BuyMoneyInfo(3)
				Rs(0) = TempStr(0) & "|||" & TempStr(1) & Dvbbs.Membername & "|||"
				Rs.Update

				Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@usermoney").text  = Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@usermoney").text -GetMoney
				Dvbbs.Execute("update [Dv_user] set UserMoney="&Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@usermoney").text &" where userid="&Dvbbs.userid)
				Dvbbs.Execute("update [Dv_user] set UserMoney=UserMoney+"&GetMoney&" where userid="&PostUserID)
				IsUpdate = True
			Else
				Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>你不能重复购买或者不能购买自已的金币帖子。&action=OtherErr"
				Exit Sub
			End If
		End If
		Rs.Close : Set Rs=Nothing
		If IsUpdate Then
			LogMsg = "购买金币帖《<a href=""Dispbbs.asp?boardid="&Dvbbs.BoardID&"&id="&Rootid&""" target=_blank><b>"&Topic&"</b></a>》成功,支付金币数为:<b>"&GetMoney&"</b>,<b>"&ToUserName&"</b>得到金币为:"&GetMoney
			Dvbbs.Dvbbs_Suc(LogMsg)
		End If
	End Sub

	Sub Main()
		dim re
		dim po,ii
		dim reContent
		dim strContent
		dim PostBuyUser
		po=0
		ii=0
		dim usermoney
		If Rootid_a="" Or Not IsNumeric(Rootid_a) Then Dvbbs.AddErrCode(35)
		set rs=Dvbbs.Execute("select userWealth from [Dv_user] where userid="&Dvbbs.Userid)
		usermoney=rs(0)
		Dvbbs.SqlQueryNum=Dvbbs.SqlQueryNum+1
		set rs=Dvbbs.iCreateObject("adodb.recordset")
		sql="select body,PostBuyUser,username,PostUserID,GetMoneyType From "&PostTable&" where Announceid="&Announceid
		rs.open sql,conn,1,3
		If rs.eof and rs.bof Then
			Dvbbs.AddErrCode(32)
			Dvbbs.ShowErr()
		Else
			If rs(4)>0 Then
				Response.redirect "showerr.asp?ErrCodes=<Br>"+"<li>由于帖子使用了特殊类型,所以不能采用金钱购买帖。&action=OtherErr"
				Exit Sub
			End If
			strContent=Dvbbs.HTMLEncode(rs(0))
			PostBuyUser=Trim(rs(1))
			'Response.Write PostBuyUser
			'Response.End
			Set re=new RegExp
			re.IgnoreCase =true
			re.Global=True
			re.Pattern="(^.*)(\[UseMoney=*([0-9]*)\])(.*)(\[\/UseMoney\])(.*)"
			po=re.Replace(strContent,"$3")
			If IsNumeric(po) Then 
				ii=int(po) 
			Else
				ii=0
			End If
			Set re=Nothing
					
			If Dvbbs.membername=rs(2) Then
				response.write "<script>alert('呵呵,您要花钱购买自己发布的帖子吗?');</script>"
			ElseIf  usermoney >ii then
				If (not isnull(PostBuyUser)) Or  PostBuyUser<>"" Then
					If InStr("|"&PostBuyUser&"|","|"&Dvbbs.membername&"|")>0 Then
						response.write "<script>alert('呵呵,您已经购买过了呀?');</script>"
					Else
						Dvbbs.Execute("update [Dv_user] set userWealth=userWealth-"&ii&" where userid="&Dvbbs.userid)
						Dvbbs.Execute("update [Dv_user] set userWealth=userWealth+"&ii&" where userid="&rs(3))
						If IsNull(Rs(1)) or  Rs(1)="" Then 
							rs(1)=Dvbbs.membername
						Else
							rs(1)=rs(1) & "|" & Dvbbs.membername
						End If
						Rs.Update 
						response.write "<script>alert('购买成功!');</script>"
					End If
				Else 
					Dvbbs.Execute("update [Dv_user] set userWealth=userWealth-"&ii&" where userid="&Dvbbs.userid)
					Dvbbs.Execute("update [Dv_user] set userWealth=userWealth+"&ii&" where userid="&rs(3))
					rs(1)=Dvbbs.membername
					Rs.Update
					response.write "<script>alert('购买成功!');</script>"
				End If
			Else
				response.write "<script>alert('您都没有钱呀?');</script>"
			End If
			
		End If
		Rs.Close 
		Set  Rs=Nothing
		Response.Write "<script language=""javascript"">"
		Response.Write "parent.location.href='"
		Response.Write "dispbbs.asp?boardid="&request("boardid")&"&ID="&RootID_a&"&replyID="&AnnounceID&"&star=1&skin=1#"&AnnounceID
		Response.Write "';"
		Response.Write "</script>"
	End Sub
	Sub view()
		Dim PostBuyUser
		sql="select PostBuyUser from "&PostTable&" where Announceid="&Announceid
		Set rs=Dvbbs.Execute(sql)
		PostBuyUser=Trim(rs(0))
		Response.Write "<table cellpadding=3 cellspacing=1 align=center class=tableborder1>"
		Response.Write "<TBODY><TR>"
		Response.Write "<Th height=24 colspan=1>查看购买贴子的用户</Th>"
		Response.Write "</TR>"
		Response.Write "<tr><TD class=tablebody2>"
		If (not isnull(PostBuyUser)) Or  PostBuyUser<>"" Then
			PostBuyUser=Replace(PostBuyUser,"|","<li>")
			Response.Write "<li>"&PostBuyUser		
		Else
			Response.Write "<br><li>还未有人购买!"
		End If
		Response.Write "</td></tr>"
		Response.Write "</table>"
		Set rs=Nothing
	End Sub
	Function checktable(Table)
		Table=Right(Trim(Table),2)
		If Not IsNumeric(table) Then Table=Right(Trim(Table),1)
		If Not IsNumeric(table) Then Dvbbs.AddErrCode(35)
		checktable="Dv_bbs"&table
	End Function 
%>